//
// Copyright (c) 2024 BPer
//
#ifndef SRC_BPERRTC_BPERRTCTWCC_H_
#define SRC_BPERRTC_BPERRTCTWCC_H_

#include <bperutil/BPerType.h>
#include <bperrtp/BPerRtcp.h>

typedef struct {
    uint16_t sn;
    uint16_t packetSize;
    uint32_t isUse;
    uint64_t localTs;
    uint64_t remoteTs;
} BPerTwccPacket;


typedef struct {
	uint16_t lastReportedSn;
	uint16_t sn;
	uint64_t packetCount;
	uint64_t lastLocalTs;
    BPerTwccPacket twccPackets[BPER_RTC_RECV_BUFFER_COUNT];
} BPerTwccSession;

typedef struct{
	BPerTwccSession session;
	void (*insertLocal)(BPerTwccSession* twcc,uint16_t sn);
	void (*insertRemote)(BPerTwccSession* twcc,uint16_t sn,int64_t ts);
	int32_t (*decode)(BPerTwccSession* twcc,BPerRtcpCommon* comm);
}BPerRtcTwcc;

void bPer_create_rtctwcc(BPerRtcTwcc* twcc);
void bPer_destroy_rtctwcc(BPerRtcTwcc* twcc);



#endif /* SRC_BPERRTC_BPERRTCTWCC_H_ */
